import axios from 'axios'
import { Message } from 'xqh-element'
import store from '@/store'
import router from '@/router'

// create an axios instance
// 创建axios实例，使用的是自己的配置项
const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API, // 环境变量
  timeout: 5000 // request timeout

})

// 添加请求拦截器
service.interceptors.request.use(function(config) {
  // 在发送请求之前做些什么
  // get请求映射params参数
  // if (config.method === 'get' && config.params) {
  //   let url = config.url + '?' + tansParams(config.params)
  //   url = url.slice(0, -1)
  //   config.params = {}
  //   config.url = url
  // }
  if (config.method === 'post' || config.method === 'put') {
    // 对POST请求进行特殊处理
    config.headers['Content-Type'] = 'application/json';
    // 如果请求体是FormData对象，需要特别处理
    if (!(config.data instanceof FormData)) {
      config.data = JSON.stringify(config.data); // 将数据序列化为JSON字符串
    }
  }
  return config
}, function(error) {
  // 对请求错误做些什么
  // console.log(error, '错误的请求拦截器')

  return Promise.reject(error)
})

// 添加响应拦截器
service.interceptors.response.use(function(response) {
  // 对响应数据做点什
  const res = response.data
  // 根据code判断当前是否授权  登录过
  // 2001 表示登录时间过长
  // 0000 表示登录请求成功
  if (res.code === '2001') {
    Message.error('登录过期请重新登录') // 消息提示
    store.dispatch('user/removeUserInfo') // 清楚vuex里面的个人信息
    sessionStorage.removeItem('this_locality_route') // 清楚浏览器存储
    // 在本地开发的时候 不需要后端nginx代理所以采用前者，在测试环境或者开发环境的时候后端需要区分这里访问的
    // 是前端地址还是后端地址，就需要用一个标识来区分
    window.location.href = process.env.VUE_APP_BASE_API + '/logout' // 调用退出接口
    router.push('/login') // 跳转到登录页
    return Promise.reject(res)
  } else if (res.code === '2002') {
    Message.error(res.msg) // 消息提示
    store.dispatch('user/removeUserInfo') // 清楚vuex里面的个人信息
    sessionStorage.removeItem('this_locality_route') // 清楚浏览器存储
    // 在本地开发的时候 不需要后端nginx代理所以采用前者，在测试环境或者开发环境的时候后端需要区分这里访问的
    // 是前端地址还是后端地址，就需要用一个标识来区分
    window.location.href = process.env.VUE_APP_BASE_API + '/logout' // 调用退出接口
    router.push('/login') // 跳转到登录页
  } else if (res.code !== '0000') {
    // 没有授权，给用户提示
    // 一旦请求失败了，不不应该走.then 应该走.catch，这里应该reject一下
    // 没有权限让用户跳转到登录页
    Message.error(res.data)
    return Promise.reject(res)
  } else {
    return res
  }
}, function(error) {
  Message.error(error)

  // 对响应错误做点什么
  return Promise.reject(error)
})

export default service
